/**
 * 嵌套表单抽象类 依赖jquery.js库
 */
var NF = window.NF = (function(doc, $) {

	// 嵌套表单处理对象定义
	var nf = function() {

		// 默认抽象方法实现配置，可以通过init()方法重写。
		var config = {
			// 表单验证函数
			validate : function() {
				return confirm("表单validate方法尚未实现，是否继续？");
			},
			// 表单元素添加函数
			addElement : function(name, value) {
				confirm("表单addElement方法尚未实现")
			},
			// 表单提交前处理函数
			before : function() {
				confirm("表单before方法尚未实现")
			},
			// 表单提交函数
			submit : function() {
				confirm("表单submit方法尚未实现")
			}
		};

		/**
		 * 表单验证代理执行函数
		 */
		this.validate = function() {
			if ($.type(config.validate) === "function") {
				return config.validate.apply(this, arguments);
			} else {
				throw new Error("验证函数设置错误");
			}
		};

		/**
		 * 添加表单元素代理执行函数
		 */
		this.addElement = function(name, value) {
			if ($.type(config.addElement) === "function") {
				config.addElement.apply(this, arguments);
			}
		};

		/**
		 * 表单执行前监听代理执行函数
		 */
		this.before = function() {
			if ($.type(config.before) === "function") {
				config.before.apply(this, arguments);
			}
		};

		/**
		 * 表单提交代理执行函数
		 */
		this.submit = function() {
			if ($.type(config.submit) === "function") {
				config.submit.apply(this, arguments);
			}
		};

		/**
		 * 初始化嵌套表单处理函数
		 */
		this.init = function(opt) {
			$.extend(config, {}, opt);
		};

		/**
		 * 通用表单提交逻辑模版方法。
		 */
		this.action = function() {
			if (this.validate(arguments)) {
				this.before(arguments);
				this.submit(arguments);
			}
		};
		
		/**
		 * 生成Token随机数
		 */
		this.genToken = function(){
			return new Date().getTime();
		};
	};

	// 加载创建并赋值到window.NF
	return new nf();
})(document, jQuery);
